/*
 * colas.h
 *
 *  Created on: 01/10/2011
 *      Author: utn_so
 */

#ifndef COLAS_H_
#define COLAS_H_

#include <stdint.h>
#include "estructuras.h"
//#include "/home/utn_so/Desarrollo/Workspace/File System/colas.c"
/*declaracion de las funciones para cluster*/



/*declaracion de la cola de cluster*/
struct nodoColaCluster
{
	uint32_t numero;
	struct nodoColaCluster *sgte;
};

struct colaCluster
{
	struct nodoColaCluster *frente;
	struct nodoColaCluster *final;
};

struct nodoColaClusterLibres
{
	uint32_t numero;
	struct nodoColaClusterLibres *sgte;
};

struct colaClusterLibres
{
	struct nodoColaClusterLibres *frente;
	struct nodoColaClusterLibres *final;
	uint32_t cantidadNodosLibres;
};

struct nodoColaArchivos
{
	char nombreArchivo[13+1]; /*archivo o directorio*/
	char esCarpeta;
	struct nodoColaArchivos *sgte;
};

struct colaArchivos
{
	struct nodoColaArchivos *frente;
	struct nodoColaArchivos *final;

};


struct nodoColaBloques
{
	uint32_t numero; /* número de bloque */
	char cantidadSectores; /* cantidad de sectores útiles que corresponden al bloque */
	struct nodoColaBloque *sgte;
};

struct colaBloques
{
	struct nodoColaBloques *frente;
	struct nodoColaBloques *final;
};

struct nodoColaBloquesFAT
{
	uint32_t numero; /* número de bloque */
	struct nodoColaBloquesFAT *sgte;
};

struct colaBloquesFAT
{
	struct nodoColaBloquesFAT *frente;
	struct nodoColaBloquesFAT *final;
};


void CrearColaCluster(struct colaCluster *cola);
void MeterEnColaCluster (struct colaCluster *cola, uint32_t x);
uint32_t SacarDeColaCluster(struct colaCluster *cola);
uint32_t ColaClusterVacia(struct colaCluster cola);

/*declaracion de las funciones para Archivos*/

void CrearColaArchivos(struct colaArchivos *cola);
void MeterEnColaArchivos (struct colaArchivos *cola, char *nombre, char esCarpeta);
char *SacarDeColaArchivos(struct colaArchivos *cola);
uint32_t ColaArchivosVacia(struct colaArchivos cola);


void CrearColaBloque (struct colaBloques *cola);
void MeterEnColaBloque (struct colaBloques *cola, uint32_t x);
uint32_t SacarDeColaBloque(struct colaBloques *cola);
uint32_t ColaBloqueVacia(struct colaBloques cola);

void CrearColaBloqueFAT (struct colaBloquesFAT *cola);
void MeterEnColaBloqueFAT (struct colaBloquesFAT *cola, uint32_t x);
uint32_t SacarDeColaBloqueFAT(struct colaBloquesFAT *cola);
uint32_t ColaBloqueVaciaFAT(struct colaBloquesFAT cola);

uint32_t ColaClusterVaciaLibres(struct colaClusterLibres cola);
uint32_t SacarDeColaClusterLibres (struct colaClusterLibres *cola);
void MeterEnColaClusterLibres (struct colaClusterLibres *cola, uint32_t x);


#endif /* COLAS_H_ */
